#include "CAmeFormat.h"  
 
 //---------------------------------------------------------------------------  
 // Constructor  
 ameHeader::ameHeader()  
 {  
     pbiBlock = NULL;  
 
     // Limpio las propiedades del mapa  
     Clear();  
 }  
 //---------------------------------------------------------------------------  
 // Destructor  
 ameHeader::~ameHeader()  
 {  
     // Elimino la memoria asignada en los bloques  
     if (pbiBlock)  
         delete [] pbiBlock;  
 }  
 //---------------------------------------------------------------------------  
 // Limpiar header  
 void ameHeader::Clear()  
 {  
     // Elimino la memoria asignada en los bloques  
     if (pbiBlock)  
         delete [] pbiBlock;  
 
     // Pongo todo en cero  
     memset(this, 0, sizeof(ameHeader));  
 }  
 //---------------------------------------------------------------------------  
 bool ameHeader::ReadFile(char *pszFile)  
 {  
	 std::fstream fsMapFile;  

	 // Abro el archivo para escritura  
     fsMapFile.open(pszFile, ios::in | ios::binary);  

	 // Chequeo si pude abrir el archivo  
     if (!fsMapFile.is_open())  
         return false;  
 
     // Leo el header del archivo  
     fsMapFile.read((char*) this, sizeof(*this));  
 
     // Asigno memoria para los bloques del layer  
     pbiBlock = new ameBlockInfo[usTileCountX *usTileCountY];  
 
     // Leo los bytes de los bloques del layer  
     fsMapFile.read((char*) pbiBlock, sizeof(ameBlockInfo) * usTileCountX * usTileCountY);  
     fsMapFile.close();  
 
     return true;  
 }  
 //---------------------------------------------------------------------------  
 bool ameHeader::WriteFile(char *pszFile)  
 {  
	 std::fstream fsMapFile;  
 
     // Abro el archivo para escritura  
     fsMapFile.open(pszFile, ios::out | ios::binary);  
 
     // Chequeo si pude abrir el archivo  
     if (!fsMapFile.is_open())  
         return false;  
 
     // Escribo el header del archivo  
     fsMapFile.write((const char*) this, sizeof(*this));  
 
     // Escribo los bloques  
     fsMapFile.write((const char*) pbiBlock, sizeof(ameBlockInfo) * usTileCountX * usTileCountY);  
     fsMapFile.close();  
 
     return true;  
 }  
 //---------------------------------------------------------------------------  
 bool ameHeader::Init(unsigned short usCountX, unsigned short usCountY)  
 {  
     // Elimino la memoria asignada en los bloques  
     if (pbiBlock)  
         delete [] pbiBlock;  
 
     this->usTileCountX = usCountX;  
     this->usTileCountY = usCountY;  
     
	 pbiBlock = new ameBlockInfo[this->usTileCountX * this->usTileCountY];  
     
	 memset((void *) pbiBlock, 0, sizeof(ameBlockInfo) * usTileCountX * usTileCountY);  
 
     for (int i=0; i<usTileCountX * usTileCountY; i++)  
     {  
         pbiBlock[i].sTileNum = usDefTileBlock;  
         pbiBlock[i].sTagCode = -1;  
     }  
 
     return true;  
 }  
 // -------------------------------------------------------------------------  
 // ameBlockInfo  
 void ameBlockInfo::Clear(unsigned short usTileDef)  
 {  
     // Limpio la estructura de memoria  
     memset(this, 0, sizeof(ameBlockInfo));  
     
	 sTileNum = usTileDef;  
 
     // Por defecto el bloque no se encuentra tageado  
     sTagCode = -1;  
 }  
 
 ameBlockInfo::ameBlockInfo()  
 {  
 }  
 
 ameBlockInfo::~ameBlockInfo()  
 {  
 }